﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SQLite;
using Zimmerreservierung.Model;

namespace Zimmerreservierung.Controller
{
    public class RechnungController
    {
        
        private static RechnungController instance;
        private SQLiteConnection connection;

        public RechnungController()
        {
            connection = new SQLiteConnection(Properties.Settings.Default.dbConnectionString);
        }

        public static RechnungController getInstance()
        {
            if (instance == null)
                instance = new RechnungController();

            return instance;
        }

        public Rechnung GetRechnung(int id)
        {
            string sql = "SELECT * FROM Rechnung WHERE ID = '" + id + "'";
            Rechnung rechnung = new Rechnung();
            try
            {
                connection.Open();
                using (SQLiteCommand cmd = new SQLiteCommand(connection))
                {
                    cmd.CommandText = sql;

                    SQLiteDataReader reader = cmd.ExecuteReader();
                    while (reader.Read())
                    {
                        rechnung.Id = id;
                        rechnung.Nummer = id;
                        rechnung.Datum = Convert.ToDateTime(reader["Datum"]);
                        rechnung.Preis = Convert.ToDouble(reader["Gesamtpreis"]);
                        Kunde kunde = new Kunde();
                        kunde.Id = Convert.ToInt32(reader["KundenId"]);
                        rechnung.Kunde = kunde;
                    }
                    connection.Close();
                    return rechnung;
                }
            } catch (Exception ex) {}
            finally
            {
                connection.Close();
            }
            return null;
        }

        public List<Reservierung> GetReservierungen(int rechnungsid)
        {
            string sql = "SELECT * FROM Reservierung WHERE RechnungsId = '" + rechnungsid + "'";
            List<Reservierung> reservierungen = new List<Reservierung>();
            try
            {
                connection.Open();
                using (SQLiteCommand cmd = new SQLiteCommand(connection))
                {
                    cmd.CommandText = sql;
                    SQLiteDataReader reader = cmd.ExecuteReader();
                    while (reader.Read())
                    {
                        Reservierung res = new Reservierung();
                        res.Id = Convert.ToInt32(reader["ID"]);
                        Zimmer zimmer = new Zimmer();
                        zimmer.Id = Convert.ToInt32(reader["ZimmerId"]);
                        res.Zimmer = zimmer;
                        res.Startdatum = Convert.ToDateTime(reader["Startdatum"]);
                        res.Enddatum = Convert.ToDateTime(reader["Enddatum"]);
                        res.FruehzeitigesEnddatum = reader["FruehzeitigesEnddatum"] != DBNull.Value ? Convert.ToDateTime(reader["FruehzeitigesEnddatum"]) : (DateTime?)null;
                        res.Storniert = Convert.ToBoolean(reader["Storniert"]);
                        res.Zimmerpreis = Convert.ToDouble(reader["Zimmerpreis"]);
                        reservierungen.Add(res);
                    }
                }
                connection.Close();
                return reservierungen;
            }
            catch (Exception ex) { }
            connection.Close();

            return null;
        }

        public void startConnection(String connectionString)
        {
            connection.Close();
            connection = new SQLiteConnection(connectionString);
        }
    }
}
